package intfns
import (
"fmt"
"math"
"github.com/ChrisTrenkamp/goxpath/tree"
)
func number(c tree .Ctx , args ...tree .Result ) (tree .Result , error ) {
if b , ok := args [0 ].(tree .IsNum ); ok {
return b .Num (), nil
}
return nil , fmt .Errorf ("Cannot convert object to a number" )
}
func sum(c tree .Ctx , args ...tree .Result ) (tree .Result , error ) {
n , ok := args [0 ].(tree .NodeSet )
if !ok {
return nil , fmt .Errorf ("Cannot convert object to a node-set" )
}
ret := 0.0
for _ , i := range n {
ret += float64 (tree .GetNodeNum (i ))
}
return tree .Num (ret ), nil
}
func floor(c tree .Ctx , args ...tree .Result ) (tree .Result , error ) {
n , ok := args [0 ].(tree .IsNum )
if !ok {
return nil , fmt .Errorf ("Cannot convert object to a number" )
}
return tree .Num (math .Floor (float64 (n .Num ()))), nil
}
func ceiling(c tree .Ctx , args ...tree .Result ) (tree .Result , error ) {
n , ok := args [0 ].(tree .IsNum )
if !ok {
return nil , fmt .Errorf ("Cannot convert object to a number" )
}
return tree .Num (math .Ceil (float64 (n .Num ()))), nil
}
func round(c tree .Ctx , args ...tree .Result ) (tree .Result , error ) {
isn , ok := args [0 ].(tree .IsNum )
if !ok {
return nil , fmt .Errorf ("Cannot convert object to a number" )
}
n := isn .Num ()
if math .IsNaN (float64 (n )) || math .IsInf (float64 (n ), 0 ) {
return n , nil
}
if n < -0.5 {
n = tree .Num (int (n - 0.5 ))
} else if n > 0.5 {
n = tree .Num (int (n + 0.5 ))
} else {
n = 0
}
return n , nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .